package com.silence.gmall.product.controller;

import com.silence.gmall.annotations.Log;
import com.silence.gmall.base.Result;
import com.silence.gmall.base.TableDataInfo;
import com.silence.gmall.product.domain.repository.SkuInfoRepository;
import com.silence.gmall.product.dto.SkuInfoDto;
import com.silence.gmall.product.enums.OnSaleEnum;
import com.silence.gmall.product.service.SkuInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * @Author silence
 * @Description 库存单元表控制器
 * @Date 2025-08-17 16:28:16
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/product")
public class SkuController {

    /**
     * SkuInfoService 的注入
     */
    private final SkuInfoService skuInfoService;

    /**
     * SkuInfoRepository 的注入
     */
    private final SkuInfoRepository skuInfoRepository;

    /**
     * 获取sku分页列表
     *
     * @param page  当前页码
     * @param limit 当前页数
     * @return sku分页列表
     */
    @GetMapping("/list/{page}/{limit}")
    @Log(interfaceName = "获取sku分页列表")
    public Result<TableDataInfo<SkuInfoDto>> pageSkuInfo(@PathVariable("page") Long page,
                                                         @PathVariable("limit") Long limit) {
        return Result.build(skuInfoRepository.pageSkuInfo(page, limit));
    }

    /**
     * 添加sku
     *
     * @param reqVo 请求参数
     * @return 响应结果
     */
    @PostMapping("/saveSkuInfo")
    @Log(interfaceName = "添加sku")
    public Result<Void> saveSkuInfo(@RequestBody SkuInfoDto reqVo) {
        skuInfoService.saveSkuInfo(reqVo);
        return Result.build();
    }

    /**
     * 修改sku
     *
     * @param reqVo 请求参数
     * @return 响应结果
     */
    @PutMapping("/updateSkuInfo")
    @Log(interfaceName = "修改sku")
    public Result<Void> updateSkuInfo(@RequestBody SkuInfoDto reqVo) {
        skuInfoService.updateSkuInfo(reqVo);
        return Result.build();
    }

    /**
     * 上架
     *
     * @param skuId skuId
     * @return 响应结果
     */
    @GetMapping("/onSale/{skuId}")
    @Log(interfaceName = "上架")
    public Result<Void> onSale(@PathVariable("skuId") Long skuId) {
        // 数据库中指定商品保存在 ES 中
        skuInfoService.onSale(skuId, OnSaleEnum.ON_SALE);
        return Result.build();
    }


    /**
     * 下架
     *
     * @param skuId skuId
     * @return 响应结果
     */
    @GetMapping("/cancelSale/{skuId}")
    @Log(interfaceName = "下架")
    public Result<Void> cancelSale(@PathVariable("skuId") Long skuId) {
        skuInfoRepository.changOnSale(skuId, OnSaleEnum.OFF_SALE);
        return Result.build();
    }
}